package ui;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.text.DefaultCaret;
import queues.Simulation;
import queues.SimulationInput;
@SuppressWarnings("serial")
public class Window extends JPanel {
private JButton start = new JButton("Start");
private JLabel welcome = new JLabel("Welcome !");
private JLabel nrClients = new JLabel("Number of clients:");
private JLabel nrQueues = new JLabel("Number of queues:");
private JLabel arrivalMin = new JLabel("Minimum arriving time:");
private JLabel arrivalMax = new JLabel("Maximum arriving time:");
private JLabel serviceMin = new JLabel("Minimum service:");
private JLabel serviceMax = new JLabel("Maximum service:");
private JLabel hours = new JLabel("Hours:");
private JTextField nrClientsField = new JTextField(10);
private JTextField nrQueuesField = new JTextField(10);
private JTextField arrivalMinField = new JTextField(10);
private JTextField arrivalMaxField = new JTextField(10);
private JTextField serviceMinField = new JTextField(10);
private JTextField serviceMaxField = new JTextField(10);
private JTextField hoursFieldMin = new JTextField(10);
private JTextField hoursFieldMax = new JTextField(10);
private JSeparator bar = new JSeparator(JSeparator.HORIZONTAL);
private JTextArea textArea = new JTextArea();
private JScrollPane scroll = new JScrollPane(textArea);
private DefaultCaret caret = (DefaultCaret) textArea.getCaret();
public Window() {
JFrame frame = new JFrame();
frame.add(this);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(700, 500);
frame.setResizable(false);
frame.setVisible(true);
frame.setLayout(null);
this.setLayout(null);
setBound(this.start, new Rectangle(600, 45, 70, 30));
add(start);
setBound(this.welcome, new Rectangle(300, 0, 100, 50));
add(welcome);
setBound(this.nrClients, new Rectangle(10, 30, 150, 50));
add(nrClients);
setBound(this.nrClientsField, new Rectangle(120, 48, 30, 17));
nrClientsField.setText("15");
add(nrClientsField);
setBound(this.nrQueues, new Rectangle(10, 50, 150, 50));
add(nrQueues);
setBound(this.nrQueuesField, new Rectangle(120, 68, 30, 17));
nrQueuesField.setText("3");
add(nrQueuesField);
setBound(this.arrivalMin, new Rectangle(170, 30, 150, 50));
add(arrivalMin);
setBound(this.arrivalMinField, new Rectangle(310, 48, 30, 17));
arrivalMinField.setText("1");
add(arrivalMinField);
arrivalMinField.setToolTipText("Enter value in minutes");
setBound(this.arrivalMax, new Rectangle(170, 50, 150, 50));
add(arrivalMax);
setBound(this.arrivalMaxField, new Rectangle(310, 68, 30, 17));
arrivalMaxField.setToolTipText("Enter value in minutes");
arrivalMaxField.setText("5");
add(arrivalMaxField);
arrivalMaxField.setToolTipText("Enter value in minutes");
setBound(this.serviceMin, new Rectangle(360, 30, 150, 50));
add(serviceMin);
setBound(this.serviceMinField, new Rectangle(470, 48, 30, 17));
serviceMinField.setText("1");
add(serviceMinField);
serviceMinField.setToolTipText("Enter value in minutes");
setBound(this.serviceMax, new Rectangle(360, 50, 150, 50));
add(serviceMax);
setBound(this.serviceMaxField, new Rectangle(470, 68, 30, 17));
serviceMaxField.setText("5");
add(serviceMaxField);
serviceMaxField.setToolTipText("Enter value in minutes");
setBound(this.hours, new Rectangle(510, 58, 100, 17));
add(hours);
setBound(this.hoursFieldMin, new Rectangle(550, 48, 30, 17));
hoursFieldMin.setText("8");
add(hoursFieldMin);
setBound(this.hoursFieldMax, new Rectangle(550, 68, 30, 17));
hoursFieldMax.setText("14");
add(hoursFieldMax);
setBound(this.bar, new Rectangle(0, 100, 700, 10));
add(bar);
JPanel area = new JPanel();
area.setBackground(Color.GRAY);
frame.add(area);
area.setBounds(new Rectangle(20, 110, 650, 350));
add(area);
caret.setUpdatePolicy(DefaultCaret.ALWAYS_UPDATE);
textArea.setBounds(new Rectangle(175, 20, 300, 300));
area.add(textArea, BorderLayout.CENTER);
scroll.setBounds(175, 20, 300, 300);
scroll.setViewportView(textArea);
area.add(scroll, BorderLayout.PAGE_END);
addValidate();
}
public void setBound(Component comp, Rectangle bounds) {
comp.setBounds(bounds);
}
private void addValidate() {
start.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
SimulationInput input = new SimulationInput(getIntFromField(nrClientsField),
getIntFromField(nrQueuesField), getIntFromField(arrivalMinField) * 1000,
getIntFromField(arrivalMaxField) * 1000, getIntFromField(serviceMinField) * 1000,
getIntFromField(serviceMaxField) * 1000, getIntFromField(hoursFieldMin),
getIntFromField(hoursFieldMax));
new Simulation(input, textArea);
}
});
}
private int getIntFromField(JTextField field) {
try {
return Integer.parseInt(field.getText());
} catch (NumberFormatException ex) {
System.out.println("Error ! Parsing input , using default value");
return 1;
}
}
}